#pragma once
#include <vector>

// GLEW
#define GLEW_STATIC
#include <gl/glew.h>
// Shader
#include "../common/shaderwrapper.h"
// GLM
#include <glm/glm.hpp>
// Assimp
#include <assimp/Importer.hpp>
#include <assimp/scene.h>
#include <assimp/postprocess.h>


struct Vertex {
	glm::vec3 Position;
	glm::vec3 Normal;
	glm::vec2 TexCoords;
};

struct Texture {
	GLuint id;
	std::string type;
	aiString path;
};

class Mesh {
public:
	/* Mesh Data */
	std::vector<Vertex> vertices;
	std::vector<GLuint> indices;
	std::vector<Texture> textures;
	/* Functions */
	Mesh(std::vector<Vertex> vertices, std::vector<GLuint> indices, std::vector<Texture> textures);
	void Draw(Shader shader);

private:
	/* Render Data */
	GLuint VAO, VBO, EBO;
	/* Functions */
	void setupMesh();
};

#include "Mesh.cpp"
